Mapping church attendance in time
back to Appendix

Cross-Sectional View

The focal variable of interest is attend, the item measuring church attendance for the year that preceded the interview date. The questionnaire recorded the responses on the ordinal scale.

Figure caption test

Creating frequency distributions for each of the measurement wave we have:

plot of chunk attend_2000_2011

Here, missing values are used in the calculation of total responses to show the natural attrition in the study. Assuming that attrition is not significantly associated with the outcome measure, we can remove missing values from the calculation of the total and look at prevalence of response endorsements over time.

plot of chunk attend_2000_2011_na

Change in prevalences

Tracing the rate of change of prevalence in a line graph, we see more clearly which categores increase over time (e.g. “Never”), which decline (e.g. “”About once/week), and which stay relatively stable (e.g. “About twice/month”).

plot of chunk attend_freq_lines

Prevalence change and race

Inspecting the prevalence trajectories across races.

Attend over race and years

plot of chunk attend_freq_lines_race

Attend over race and ages

Bin includes all respondents who were +/- 6 months from a given age expressed as an intiger.s For example, a 16 year-old is defined as an individual between 15.5 and 16.5 years of age at the time of the interview.

plot of chunk attend_freq_lines_race_ages

Race and attendance for each year

plot of chunk attend_race_2000

Race and attendance for each age bin

plot of chunk attend_race_16

Counts for data used in models

The following tables inspect the counts of valid responses (church attendance) across two time metircs (age and NLSY97 round) and cohort membership.

ds<- dsL %>%  # chose conditions to apply in creating dataset for modeling
  dplyr::filter(id %in% c(1:9022)) %.% # 1:9022
  dplyr::filter(year %in% c(2000:2011)) %.% # 1997:2011
  dplyr::filter(sample %in% c(0,1)) %.% # 0-Oversample; 1-Cross-Sectional
  dplyr::filter(race %in% c(1:4)) %.% # 1-Black; 2-Hispanis; 3-Mixed; 4-White
  dplyr::filter(byear %in% c(1980:1984)) %>% # birth year 1980:1984
  dplyr::mutate(age=round(agemon/12,0)) # define bin for age
length(unique(ds$id)) # total No. of respondents in dataset
[1] 8983
d<- ds %>% 
  filter(!is.na(attend)) # only nonmissing datapoints
table(d$byear,d$year) # Number of respondent in each NLSY97 round 
      
       2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
  1980 1423 1404 1409 1383 1319 1307 1334 1327 1327 1366 1317 1297
  1981 1617 1578 1582 1562 1477 1416 1502 1462 1472 1502 1501 1497
  1982 1656 1601 1612 1588 1529 1506 1521 1502 1507 1529 1502 1477
  1983 1672 1636 1629 1603 1506 1491 1525 1499 1512 1502 1495 1480
  1984 1650 1630 1632 1578 1484 1463 1488 1473 1459 1460 1455 1440
table(d$byear, d$age) # Number of respondent in each age bin 
      
         16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32
  1980    0    0    0    0  702 1315 1549 1350 1414 1245 1456 1290 1406 1343 1342 1327  474
  1981    0    0    0  690 1743 1466 1780 1328 1614 1386 1687 1306 1737 1247 1753  431    0
  1982    0    0  848 1528 1766 1510 1629 1448 1699 1444 1594 1517 1491 1503  553    0    0
  1983    0  724 1815 1519 1767 1376 1681 1449 1713 1329 1765 1250 1752  410    0    0    0
  1984  879 1535 1758 1550 1580 1416 1635 1425 1530 1479 1447 1464  514    0    0    0    0
table(d$age,d$year) # cross-section of age and round of NLSY97
    
     2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
  16  879    0    0    0    0    0    0    0    0    0    0    0
  17 1495  764    0    0    0    0    0    0    0    0    0    0
  18 1796 1733  892    0    0    0    0    0    0    0    0    0
  19 1498 1489 1490  810    0    0    0    0    0    0    0    0
  20 1629 1697 1764 1656  812    0    0    0    0    0    0    0
  21  721 1356 1430 1499 1333  744    0    0    0    0    0    0
  22    0  810 1618 1706 1669 1555  916    0    0    0    0    0
  23    0    0  669 1341 1373 1398 1366  853    0    0    0    0
  24    0    0    1  702 1520 1568 1667 1602  910    0    0    0
  25    0    0    0    0  608 1248 1360 1376 1361  930    0    0
  26    0    0    0    0    0  670 1513 1603 1651 1595  917    0
  27    0    0    0    0    0    0  548 1244 1360 1398 1351  926
  28    0    0    0    0    0    0    0  585 1489 1637 1605 1584
  29    0    0    0    0    0    0    0    0  506 1270 1393 1334
  30    0    0    0    0    0    0    0    0    0  529 1500 1619
  31    0    0    0    0    0    0    0    0    0    0  504 1254
  32    0    0    0    0    0    0    0    0    0    0    0  474

Such view allows to see quickly whether each cell contains enough observations to offer potential for stable estimation solutions.

ds<- dsL %>%  # chose conditions to apply in creating dataset for modeling
  dplyr::filter(id %in% c(1:9022)) %.% # 1:9022
  dplyr::filter(year %in% c(2000:2011)) %.% # 1997:2011
  dplyr::filter(sample %in% c(0)) %.% # 0-Oversample; 1-Cross-Sectional
  dplyr::filter(race %in% c(1)) %.% # 1-Black; 2-Hispanis; 3-Mixed; 4-White
  dplyr::filter(byear %in% c(1980:1984)) %>% # birth year 1980:1984
  dplyr::filter(sex==1) %>% # 1-Male; 2-Female
  dplyr::mutate(age=round(agemon/12,0)) # define bin for age

length(unique(ds$id)) # total No. of respondents in dataset
[1] 632
d<- ds %>% 
  filter(!is.na(attend)) # only nonmissing datapoints
table(d$byear,d$year) # Number of respondent in each NLSY97 round 
      
       2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
  1980   89   89   92   90   80   80   80   82   82   79   79   82
  1981  139  127  137  140  113  112  127  121  121  116  123  122
  1982  127  116  125  121  107  114  115  109  112  111  110  111
  1983  115  112  112  108   96   99  102  100  100   96   93   92
  1984  104   96   99   94   84   92   87   81   88   80   93   91
table(d$byear, d$age) # Number of respondent in each age bin 
      
        16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32
  1980   0   0   0   0  51  79 102  87  89  79  79  88  77  87  76  82  28
  1981   0   0   0  62 151 120 159 106 128 114 138 111 138  96 143  32   0
  1982   0   0  57 119 136 116 120 103 128 109 112 116 104 113  45   0   0
  1983   0  47 130 102 118  86 118  92 112  89 116  82 108  25   0   0   0
  1984  48 102  98  99  89  81 104  81  88  84  83  96  36   0   0   0   0
table(d$age,d$year) # cross-section of age and round of NLSY97
    
     2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
  16   48    0    0    0    0    0    0    0    0    0    0    0
  17  103   46    0    0    0    0    0    0    0    0    0    0
  18  125  112   48    0    0    0    0    0    0    0    0    0
  19  132   99  103   48    0    0    0    0    0    0    0    0
  20  128  141  129  104   43    0    0    0    0    0    0    0
  21   38   94  123  110   77   40    0    0    0    0    0    0
  22    0   48  124  150  119  110   52    0    0    0    0    0
  23    0    0   38  100  103   96   86   46    0    0    0    0
  24    0    0    0   41  106  129  120   96   53    0    0    0
  25    0    0    0    0   32   89  118  102   85   49    0    0
  26    0    0    0    0    0   33  101  129  116   97   52    0
  27    0    0    0    0    0    0   34   92  119  100   93   55
  28    0    0    0    0    0    0    0   28   97  131  104  103
  29    0    0    0    0    0    0    0    0   33   80  117   91
  30    0    0    0    0    0    0    0    0    0   25  104  135
  31    0    0    0    0    0    0    0    0    0    0   28   86
  32    0    0    0    0    0    0    0    0    0    0    0   28

Longitudinal View

Graphs above shows change in the cross-sectional distribution of responses over the years. Modeling the change in these response frequencies is handled well by Markov models. LCM, however, works with longitudinal data, modeling the trajectory of each individual and treating attendance as a continuous outcome.

To demonstrate mapping of individual trajectories to time, let’s select a dataset that would include personal identifyer (id), cohort indicator (byear), wave of measurement (year) and the focal variable of interest - worship attendance (attend).

ds<- dsL %>%  dplyr::filter(year %in% c(2000:2011), id==47) %>%
              dplyr:: select(id, byear, year, attend, attendF)
print(ds)
   id byear year attend              attendF
1  47  1982 2000      5    About twice/month
2  47  1982 2001      2        Once or Twice
3  47  1982 2002      4     About once/month
4  47  1982 2003      2        Once or Twice
5  47  1982 2004      3 Less than once/month
6  47  1982 2005      2        Once or Twice
7  47  1982 2006      2        Once or Twice
8  47  1982 2007      3 Less than once/month
9  47  1982 2008      2        Once or Twice
10 47  1982 2009      1                Never
11 47  1982 2010      1                Never
12 47  1982 2011      1                Never

The view above lists attendance data for subjust with id = 47. Mapping his attendance to time we have .

plot of chunk attend_line_1id

where vertical dimension maps the outcome value and the horizontal maps the time. There will be a trajecory for each of the respondents. Each of such trajectories imply a story, a life scenario. Why one person grows in his religious involvement, while other declines, or never develops an interest in the first place? To demostrate how interpretations of trajectories can vary among individuals consider the following example.

Attendance over waves

Attendance trajectories of subjects with ids 4, 25, 35, and 47 are plotted in the next graph

plot of chunk attend_line_4id_years

The respondent id = 35 reported attending no worship services in any of the years, while respodent id = 25 seemed to frequent it, indicating weekly attendance in 8 out of the 12 years. Individual id = 47 started as a fairly regular attendee of religious services in 2000 (5 = “about twice a month”), then gradually declined his involvement to nill in 2009 and on. Respondent id = 4, on the other hand started off with a rather passive involvement, reporting attended church only “Once or twice” in 2000, maintained a low level of participation throughout the years, only to surge his attendance in 2011. Latent curve models will describe intraindividual trajectories of change, while summarizinig the interindividual similarities and trends.

Changing the metric of time

Previous research in religiousity indicated that age might be one of the primary factors explaining interindividual differences in church attendance. To examine the role of age, we change the metric of time from waves of measurement, as in the previous graph, to biological age. Consult Metrics report for details on measurement of age.

ds<- dsL %>% dplyr::filter(id %in% c(4,25,35,47),year %in% c(2000:2011)) %>% 
  dplyr::select(idF,byear,bmonth,year,ageyear,agemon) %.%
  dplyr::mutate(time=year-2000, age=agemon/12)
print(ds[ds$idF==25,])
   idF byear bmonth year ageyear agemon time   age
13  25  1983      3 2000      17    214    0 17.83
14  25  1983      3 2001      18    226    1 18.83
15  25  1983      3 2002      19    236    2 19.67
16  25  1983      3 2003      21    254    3 21.17
17  25  1983      3 2004      21    261    4 21.75
18  25  1983      3 2005      22    272    5 22.67
19  25  1983      3 2006      23    284    6 23.67
20  25  1983      3 2007      24    295    7 24.58
21  25  1983      3 2008      25    307    8 25.58
22  25  1983      3 2009      26    319    9 26.58
23  25  1983      3 2010      27    332   10 27.67
24  25  1983      3 2011      28    342   11 28.50

Attendance over ages

Plotting individual trajectories, with age as the metric of time.

plot of chunk attend_line_4id_age3

Read more

in ./Models/Descriptives:

See also